#include "Elemento.h"
#include <iostream>
#include "../FuncionesUtiles.h"
#include "TipoClaveElemento.h"

Elemento::Elemento(Key clave, offset offset):clave(clave)
{
	this->archivo = offset;
}

Key Elemento::getClave() const{
return clave;
}

Elemento::Elemento(const Elemento& otro):clave(otro.clave){
	this->archivo = otro.archivo;
}

Elemento::Elemento(){
	this->archivo = 0;
}


Elemento::~Elemento()
{
}
void Elemento::setKey(const Key& k){
	this->clave = k;
}

offset Elemento::getDato()const{
	return archivo;
}

Bytes Elemento::serializarse(){
	Bytes bytes;
	bytes.agregarAlFinal(clave.serializarse());
	bytes.agregarAlFinal(&archivo,sizeof(offset));
	return bytes;
}

bool Elemento::hidratarse(const Bytes& b,TipoClave* ext){
	TipoClaveElemento extractorElemento;
	Bytes bc = extractorElemento.extraerClave(b); // levanta el campo usado como clave
	unsigned tam = bc.getTamanio();
	this->clave =  ext->crearClave(bc);
	offset temp;
	bool resB = b.leer(&temp,tam,sizeof(offset));
	this->archivo = temp;
	return (resB );
}
bool Elemento::operator<=(const Elemento& otro) const{
	 return (this->clave <= otro.clave);
}
